// 登录拦截 / 权限页面控制
import router from './router'
import store from './store'

import nProgress from 'nprogress'
import 'nprogress/nprogress.css'

import { asyncRouters } from '@/router'

// 前置导航守卫
// 只要经过导航守卫  先判断是否有token
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // console.log('前置')
  nProgress.start() // 开启进度条
  const token = store.getters.token
  if (token) {
    if (to.path === '/login') {
      // 有token禁止访问登录页面
      next('/') // 被强制拦截的页面 不会经过后置导航守卫 单独控制进度条的关闭
      nProgress.done()
    } else {
      // 坑 后期会在这个位置处理权限
      if (!store.getters.userId) {
        const { roles: { menus }} = await store.dispatch('user/getInfo')
        // console.log(store.state.user.userInfo)  这样也可以获取
        // 个人信息
        console.log(menus) // 权限列表
        // 下边筛选得条件要和这里menus 一致
        // 根据个人权限列表 筛选出对应的应有的路由规则 并添加到路由规则上
        // 如果不写children需要单独在路由配置name
        // menus是我们菜单访问权
        //                                            item.name  也可以 或者 儿子下的也可以name
        const filterRoutes = asyncRouters.filter(item => menus.includes(item.children[0].name))
        console.log(filterRoutes)
        // 维护的数据
        store.commit('user/addFilterRoutes', filterRoutes)
        // 为路由规则新增 addRoutes
        router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
        // 解决刷新白屏  因为一刷新恢复了 所以next
        next(to.path) // addRoutes的问题 addRoutes新增的规则路由实例创建的规则并不是routes
      }
      next() // 有token想去哪就拿
    }
  } else {
    //  没有token  可以访问白名单
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 没有token 访问非白名单页面 前置登录
      next('/login')
      nProgress.done()
    }
  }
})

// 后置导航守卫
router.afterEach((to, from) => {
  //  console.log('后置');
  nProgress.done()
})
